package dom;

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

public class TestDOMParser {

    public static void main(String[] args) {


        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();


        try {
            //获得解析器
            DocumentBuilder parser=factory.newDocumentBuilder();

            //解析，将xml解析完成，文件已经全部读取完毕，在内存中已经有一个树型结构
            Document document= parser.parse(TestDOMParser.class
                                                         .getClassLoader()
                                                         .getResourceAsStream("students.xml"));


            //根标签
            Element root=document.getDocumentElement();

            System.out.println(root);

            //标签名
            System.out.println(root.getTagName());

            //标签中的no属性值
            String no=root.getAttribute("no");

            System.out.println(no);

            //获得class标签的所有子节点
            NodeList nodeList=root.getChildNodes();

            //子节点个数
            System.out.println(nodeList.getLength());

            //子节点类型的常量
            System.out.println("文本："+ Node.TEXT_NODE);
            System.out.println("元素："+ Node.ELEMENT_NODE);

            for (int i = 0; i < nodeList.getLength(); i++) {
                //获得每一个节点
                Node node=nodeList.item(i);

                //获得节点类型
                short nodeType=node.getNodeType();
                System.out.println(nodeType);

                if(nodeType==Node.TEXT_NODE){
                    //读取文本内容
                    System.out.println(node.getNodeValue());
                }

                if(nodeType==Node.ELEMENT_NODE){
                    Element childElement= (Element) node;
                    System.out.println(childElement.getTagName());
                    //获得标签的所有属性
                    NamedNodeMap map=childElement.getAttributes();
                    for (int j = 0; j < map.getLength(); j++) {
                        Attr attr= (Attr) map.item(j);
                        System.out.println(attr.getName()+"="+attr.getValue());
                    }
                }

            }



        } catch (Exception e) {
            e.printStackTrace();
        }


    }


}
